package com.yyh.io2;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

/*2.假设从入学开始所有书写的Java类代码都在d:/huayujava文件夹下，包括多级子文件夹。使用IO流获取从入学开始，
到目前为止已经写了多少行Java代码。
提示：其实就是获取d:/huayujava文件夹及其子文件夹下的所有
.java文件，使用readLine()读取其中每一行，每读取一行，行数加1。所有的文件读取完毕，得.到总共已经写的Java代码行数。需要结合递归实现。*/
public class Test66 {
    public static void main(String[] args) {
        //获取目录
        long count = count("D:\\course\\02-JavaSE进阶\\day10-IO流\\代码2");
        System.out.println("总共写了" + count + "行Java代码");
    }
    //获取目录下所有文件
    public static long count(String path) {
        //创建目录对象
        File file = new File(path);
        //判断是文件还是文件夹
        if (file.isFile()) {
            //判断文件名是否是.java
            if (file.getName().endsWith(".java")) {
                return countLines(file);//获取文件行数
            }
        } else {//文件夹
            File[] files = file.listFiles();
            long count = 0;
            //循环获取子文件
            for (File f : files) {
                count += count(f.getAbsolutePath());
            }
            return count;
        }
        return 0;
    }
    //获取文件行数
    public static long countLines(File file) {
        //创建文件输入流
        long count = 0;
        try (FileInputStream fis = new FileInputStream(file);
             BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
            while (br.readLine() != null) {
                count++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return count;
    }
}
